package core.thread;

import java.io.FileOutputStream;
import java.text.DecimalFormat;
import java.util.ArrayList;
import java.util.List;

import com.itextpdf.text.Document;
import com.itextpdf.text.Image;
import com.itextpdf.text.pdf.PdfPTable;
import com.itextpdf.text.pdf.PdfWriter;

import core.model.Carrito;

/**Clase que crea una tabla en pdf en una ruta especificada recibiendo como parametro una lista de tipo carrito.
 * @author alvarogarcia
 *
 */
public class TablaPDF {
	Thread t;
	PdfPTable tabla,tabla2,tabla3;
	Image encabezado;
	Document miPdf;
	FileOutputStream ficheroPdf;
	List<Carrito> contenido;
	String ruta;

	/**Constructor de objetos de tipo tablaPDF
	 * @param ruta recibe la rutra en la que se guarda el archivo
	 * @param contenido Recibe una lista de tipo carrito
	 */
	public TablaPDF(String ruta, List<Carrito> contenido) {
		this.ruta=ruta;
		this.contenido=contenido;
		declararHilo();
	}
	
	/**Declara el hilo que se ejecuta para crear la tabla
	 * 
	 */
	public void declararHilo()
	{
		t = new Thread(new Runnable() {
			public void run() {
				try{
					
					 ficheroPdf = new FileOutputStream(
							ruta);
					 miPdf = new Document();
					PdfWriter.getInstance(miPdf, ficheroPdf);
					miPdf.open();
					// El constructor recibe el numero de columnas
				 tabla = new PdfPTable(4);
				tabla2 = new PdfPTable(4);
				 encabezado = Image
						.getInstance("src/GUI/resources/encabezadoPDF.png");
				tabla.addCell("Nombre del producto");
				tabla.addCell("Supermercado");
				tabla.addCell("Cantidad");
				tabla.addCell("Precio/Unidad");
				miPdf.add(encabezado);
				miPdf.add(tabla);
				Carrito CarritoActual;
				float total=0;
				for(int i=0;i<contenido.size();i++)
				{
					PdfPTable tabla3=new PdfPTable (4);
					CarritoActual=contenido.get(i);
					tabla3.addCell(CarritoActual.getNombre_producto());
					tabla3.addCell(CarritoActual.getNombre_empresa());
					tabla3.addCell(Integer.toString(CarritoActual.getCantidad()));
					tabla3.addCell(Float.toString(CarritoActual.getPrecio()));
					total=total+(CarritoActual.getCantidad() * CarritoActual.getPrecio());
					miPdf.add(tabla3);
					
				}
				
				tabla2.addCell("");
				tabla2.addCell("");
				tabla2.addCell("Importe total: ");
				DecimalFormat df = new DecimalFormat("0.00"); 
				tabla2.addCell(df.format(total).toString()+"�");
				miPdf.add(tabla2);
				miPdf.close();
				ficheroPdf.close();
			} catch (Exception e) {
				e.printStackTrace();
			}
			}
		});

	}
	/**
	 * Metodo que arranca el hilo
	 */
	public void arrancarHilo()
	{
		t.run();
	}

	/**Pequeño main de prueba para probar la consistencia de la clase.
	 * @param args
	 */
	public static void main(String[] args) {
		Carrito a=new Carrito("Gaseosa","Dia",1,3,"545555");
		List<Carrito> lista=new ArrayList<Carrito>();
		for(int i=0;i<999;i++)
		{
			lista.add(a);
		}
		TablaPDF tabla = new TablaPDF("/Users/alvarogarcia/Desktop/aaa.pdf",lista);
		tabla.arrancarHilo();
		
	}
}